// src/utils/request.js
import axios from 'axios';
// 创建 Axios 实例
const request = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL, // 接口基础路径（根据实际后端地址调整，如 'http://your-domain.com/api'）
  timeout: 10000, // 超时时间（10秒）
  headers: {
    'Content-Type': 'application/json;charset=utf-8' // 固定 JSON 格式
  }
});

// 请求拦截器：添加认证令牌（如有）
request.interceptors.request.use(
  (config) => {
    // 若有登录令牌，添加到请求头（根据实际认证方式调整）
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    // 请求前的错误处理
    return Promise.reject(error);
  }
);

// 响应拦截器：统一处理后端响应
request.interceptors.response.use(
  (response) => {
    // 直接返回完整的响应数据，让调用方自己处理
    return response.data;
  },
  (error) => {
    // 网络错误或服务器错误处理
    let message = '网络异常，请稍后重试';
    
    if (error.code === 'ERR_NETWORK') {
      message = '网络连接失败，请检查网络连接';
    } else if (error.code === 'ECONNABORTED' || error.message.includes('timeout')) {
      message = '请求超时，请重试';
    } else if (error.response) {
      // 服务器返回错误（如 500）
      const status = error.response.status;
      if (status >= 500) {
        message = '服务器内部错误，请稍后重试';
      } else if (status === 404) {
        message = '请求的资源不存在';
      } else if (status === 403) {
        message = '没有权限访问该资源';
      } else if (status === 401) {
        message = '身份验证失败，请重新登录';
      } else {
        message = `请求失败（${status}）：${error.response.data?.message || message}`;
      }
    }
    
    // 保留原始错误信息
    error.userMessage = message;
    console.error('Request error:', {
      message: error.message,
      code: error.code,
      status: error.response?.status,
      url: error.config?.url
    });
    
    return Promise.reject(error);
  }
);

export default request;